


# 返回 xx xx 格式的 16进制数 长度标识
def lenToHex(len) :
  hexStr = hex(len)[2:]
  return ('00'+hexStr[:-2])[-2:]+" "+('00'+hexStr[-2:])[-2:]

def getLenOfByte(strs):
  return int(len(strs.replace(" ","")) / 2)


# 生成连接报文
dirs = ["" for x in range(13)]
dirs[0] = "10"                #10 固定报头
dirs[1] = "1C"                #1C 后面字节的长度 不包括0,1
dirs[2] = "00 06"             #协议的字节长度 MQIsdp 6
dirs[3] = "4D 51 49 73 64 70" #MQIsdp 对应的16进制码
dirs[4] = "03"                #版本号 03 
dirs[5] = "C2"                #连接标志 C2 
dirs[6] = "01 2C"             #保活时间 300S 
dirs[7] = "00 04"             #客户端ID字节长度
dirs[8] = "5A 4A 43 4B"       #客户端ID
dirs[9] = "00 00"             #用户名长度 5 
dirs[10] = "61 64 6D 69 6E"   #用户名:admin
dirs[11] = "00 00"            #服务器密码长度 8 
dirs[12] = "70 61 73 73 77 6F 72 64" #服务器密码:password

dirs[11] = lenToHex(getLenOfByte(dirs[12]))
dirs[9] = lenToHex(getLenOfByte(dirs[10]))
dirs[7] = lenToHex(getLenOfByte(dirs[8]))

ll = getLenOfByte("".join(dirs[2:]))
dirs[1] = ('00'+hex(ll)[2:])[-2:]

print(" ".join(dirs))


# 生成订阅报文

dirs = ["" for x in range(6)]

dirs[0] = "82"                #协议规定订阅报头82
dirs[1] = "1C"                #后面字节的长度 不包括0,1
dirs[2] = "00 01"             #消息标识
dirs[3] = "00 03" #主题名字节长度
dirs[4] = "61 61 61"                #主题名
dirs[5] = "00"                #Qos 信号质量

dirs[3] = lenToHex(getLenOfByte(dirs[4]))

ll = getLenOfByte("".join(dirs[2:]))
dirs[1] = ('00'+hex(ll)[2:])[-2:]

print(" ".join(dirs))


